sizegroup: Skip resizes on widgets that have resize queued
authorBenjamin Otte <otte@redhat.com>
Mon, 28 Sep 2015 03:48:57 +0000 (05:48 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 28 Oct 2015 18:44:28 +0000 (19:44 +0100)
Widgets that already have a resize queued don't need to walk the whole
parent chain and queue another resize. It's enough to do it once per
resize.

This also means that sizegroups cannot use the shortcut of just
invalidating the first widget in the group anymore. That widget might
already have a resize queued while others don't.

gtk/gtksizegroup.c
gtk/gtkwindow.c

index 3eddc1fddb84f9542467efe46d63633f639d0903..a6e0d1f600858aebdfcac15ee4eb3045afc7e5d1 100644 (file)
@@ -217,6 +217,9 @@ queue_resize_on_widget (GtkWidget *widget,
 
   do
     {
+      if (gtk_widget_get_resize_needed (parent))
+        return;
+
       gtk_widget_queue_resize_on_widget (parent);
 
       if (!check_siblings || _gtk_widget_get_sizegroups (parent) == NULL)
@@ -268,9 +271,12 @@ static void
 queue_resize_on_group (GtkSizeGroup *size_group)
 {
   GtkSizeGroupPrivate *priv = size_group->priv;
+  GSList *list;
 
-  if (priv->widgets)
-    queue_resize_on_widget (priv->widgets->data, TRUE);
+  for (list = priv->widgets; list; list = list->next)
+    {
+      gtk_widget_queue_resize (list->data);
+    }
 }
 
 static void
index e65045b9acfafeb8ce2bc49c1494a99431e1c024..fb8c2a202c27388266763d93ad22690ff03e9d1a 100644 (file)
@@ -7686,6 +7686,7 @@ gtk_window_configure_event (GtkWidget         *widget,
   priv->configure_notify_received = TRUE;
 
   gtk_widget_queue_resize (widget);
+  gtk_container_queue_resize_handler (GTK_CONTAINER (widget));
   
   return TRUE;
 }